From: Adrian Vovk Date: Thu, 13 Nov 2025 19:01:20 +0000 (-0500) Subject: data: Overhaul systemd units X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~44^2~37 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0eb754a084;p=gnome-shell.git data: Overhaul systemd units This simplifies the structure of the systemd units, since we no longer support running with X11. But it also allows us to pass in the gnome-shell session mode via systemd. This removes the need for GDM to have any special code to handle the GNOME_SHELL_SESSION_MODE environment variable, and allows GNOME sessions to specify directly what session mode they need without the involvement of GDM. This makes it trivial to define custom gnome-session sessions that use custom gnome-shell session modes. Sessions that consist entirely of a gnome-shell mode (like the gnome-classic session) will need to do a little more legwork to define themselves as proper gnome-session sessions. --- diff --git a/data/meson.build b/data/meson.build index 0378910b2..bc1c6ab2d 100644 --- a/data/meson.build +++ b/data/meson.build @@ -114,31 +114,17 @@ install_data('00_org.gnome.shell.gschema.override', install_dir: schemadir) if have_systemd unitconf = configuration_data() unitconf.set('bindir', bindir) - supported_sessions = ['wayland'] - configure_file( - input: 'org.gnome.Shell@wayland.service.in', - output: 'org.gnome.Shell@wayland.service', + input: 'org.gnome.Shell@.service.in', + output: 'org.gnome.Shell@.service', configuration: unitconf, install_dir: systemduserunitdir ) - - units = files('org.gnome.Shell-disable-extensions.service') - targetconf = configuration_data() - sessions_wants = [] - foreach session: supported_sessions - sessions_wants += 'org.gnome.Shell@' + session + '.service' - endforeach - targetconf.set('SUPPORTED_SESSIONS', ' '.join(sessions_wants)) - target = configure_file( - input: 'org.gnome.Shell.target.in', - output: 'org.gnome.Shell.target', - configuration: targetconf + install_data ( + 'org.gnome.Shell-disable-extensions.service', + install_dir: systemduserunitdir, ) - units += target - - install_data(units, install_dir: systemduserunitdir) endif # for unit tests - gnome.compile_schemas() only looks in srcdir diff --git a/data/org.gnome.Shell.target.in b/data/org.gnome.Shell.target.in deleted file mode 100644 index bb65fa0e6..000000000 --- a/data/org.gnome.Shell.target.in +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=GNOME Shell -DefaultDependencies=no - -Requisite=gnome-session-initialized.target -PartOf=gnome-session-initialized.target -Before=gnome-session-initialized.target - -Wants=@SUPPORTED_SESSIONS@ \ No newline at end of file diff --git a/data/org.gnome.Shell@.service.in b/data/org.gnome.Shell@.service.in new file mode 100644 index 000000000..d9dd732d2 --- /dev/null +++ b/data/org.gnome.Shell@.service.in @@ -0,0 +1,33 @@ +[Unit] +Description=GNOME Shell +OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target +OnFailureJobMode=replace-irreversibly +CollectMode=inactive-or-failed +RefuseManualStart=on +RefuseManualStop=on + +After=gnome-session-manager.target + +Requisite=gnome-session-initialized.target +PartOf=gnome-session-initialized.target +Before=gnome-session-initialized.target + +AssertEnvironment=XDG_SESSION_TYPE=wayland + +[Service] +Slice=session.slice +Type=notify +ExecStart=@bindir@/gnome-shell --mode=%i +# Exit code 1 means we are probably *not* dealing with an extension failure +SuccessExitStatus=1 + +# unset some environment variables that were set by the shell and won't work now that the shell is gone +ExecStopPost=-systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY + +# On wayland we cannot restart +Restart=no +# Kill any stubborn child processes after this long +TimeoutStopSec=5 + +# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early +OOMScoreAdjust=-1000 diff --git a/data/org.gnome.Shell@wayland.service.in b/data/org.gnome.Shell@wayland.service.in deleted file mode 100644 index 813da0b70..000000000 --- a/data/org.gnome.Shell@wayland.service.in +++ /dev/null @@ -1,34 +0,0 @@ -[Unit] -Description=GNOME Shell on Wayland -# On wayland, force a session shutdown -OnFailure=org.gnome.Shell-disable-extensions.service gnome-session-shutdown.target -OnFailureJobMode=replace-irreversibly -CollectMode=inactive-or-failed -RefuseManualStart=on -RefuseManualStop=on - -After=gnome-session-manager.target - -Requisite=gnome-session-initialized.target -PartOf=gnome-session-initialized.target -Before=gnome-session-initialized.target - -ConditionEnvironment=XDG_SESSION_TYPE=%I - -[Service] -Slice=session.slice -Type=notify -ExecStart=@bindir@/gnome-shell -# Exit code 1 means we are probably *not* dealing with an extension failure -SuccessExitStatus=1 - -# unset some environment variables that were set by the shell and won't work now that the shell is gone -ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment GNOME_SETUP_DISPLAY WAYLAND_DISPLAY DISPLAY XAUTHORITY' - -# On wayland we cannot restart -Restart=no -# Kill any stubborn child processes after this long -TimeoutStopSec=5 - -# Lower down gnome-shell's OOM score to avoid being killed by OOM-killer too early -OOMScoreAdjust=-1000